# Project 6 IR Reception ![9681c7da-a7c9-49ed-ad8c-32e00c6aeb07](media/A42.png) ### **1.説明** 赤外線リモコンは日常生活で広く使われていることは間違いありません。テレビ、ステレオ、ビデオレコーダー、衛星信号受信機など、さまざまな家電製品の制御に使用されます。赤外線リモコンは赤外線送信システムと赤外線受信システムで構成されており、すなわち赤外線リモコンと赤外線受信モジュール、およびデコード可能なマイコンから成り立っています。 ![image-20250509154423060](media/A43.png) リモコンから発せられる38Kの赤外線搬送波信号は、リモコン内のエンコードチップによって符号化されています。これはパイロットコード、ユーザーコード、ユーザー逆コード、データコード、データ逆コードの一連のコードで構成されています。パルスの時間間隔によって0か1の信号かを区別し、これらの0、1信号で符号化が行われています。 同じリモコンのユーザーコードは一定ですが、データコードはキーを識別します。 リモコンのボタンが押されると、リモコンは赤外線搬送波信号を送信します。IR受信機が信号を受信すると、プログラムは搬送波信号をデコードし、どのキーが押されたかを判定します。MCUは受信した0と1の信号をデコードし、リモコンのどのキーが押されたかを判断します。 使用する赤外線受信機は赤外線受信モジュールです。主に受信、増幅、復調を統合した赤外線受信ヘッドで構成されています。内部ICは復調を完了しており、赤外線受信から出力までを実現し、TTL信号に対応しています。 さらに、赤外線リモコンや赤外線データ伝送に適しています。受信機で作られた赤外線受信モジュールは信号線、VCC、GNDの3ピンのみで構成されており、Arduinoや他のマイコンとの通信が非常に便利です。 ### **2.仕様** - 動作電圧:3.3-5V(DC) - 出力信号:デジタル信号 - 受信角度:90度 - 周波数:38kHz - 受信距離:10m 下の写真は赤外線受信機の実物と回路図です。 ![image-20250510082651985](media/A44.png) ### **3.部品** | 開発ボード *1 | 8833 モータードライバ *1 | 赤色LEDモジュール*1 | | :------------------------------: | :--------------------------------------------: | :--------------------------: | | ![img](media/A8.jpg) | ![img](media/A9.jpg) | ![img](media/A10.jpg) | | 3P デュポン線*1 | USBケーブル*1 | | | ![img](media/A11.jpg) | ![img](media/A12.jpg) | | 8833ボードはIR受信機を統合しているため、配線は不要です。IR受信モジュールのピンはG(GND)、V(VCC)、D3です。 ### **4.テストコード** ```c //************************************************************************************* /* keyestudio 4wd BT Car lesson 6.1 IR remote http://www.keyestudio.com */ #include // IRremoteライブラリの宣言 int RECV_PIN = 3; // IR受信機のピンをD3に定義 IRrecv irrecv(RECV_PIN); decode_results results; // decode_resultsの“results”にデコード結果が存在 void setup() { Serial.begin(9600); irrecv.enableIRIn(); // 受信機を有効化 } void loop() { if (irrecv.decode(&results))// デコード成功、赤外線信号を受信 { Serial.println(results.value, HEX);// 16進数でコードを出力 irrecv.resume(); // 次の値を受信 } delay(100); } //************************************************************************************* ``` ### **5.テスト結果** コードをV4.0ボードに正常にアップロードした後、配線図に従って配線を接続し、USBケーブルでコンピュータに接続してボードに電源を供給します。電源を入れたら、シリアルモニターを開き、ボーレートを9600に設定します。 リモコンを取り出し、赤外線受信センサーに信号を送信します。対応するキーのキー値が表示されます。キーの押下時間が長すぎると、FFFFFFFFが文字化けしやすくなります。 ![image-20250510082931375](media/A45.png) Keyestudioリモコンのキー値は以下の通りです。 ![image-20250510082942450](media/A46.png) ### **6.コード説明** **irrecv.enableIRIn():** IRデコードを有効にすると、IR信号が受信されます。 **decode():** 関数“decode()”はデコードが成功したかどうかを継続的にチェックします。 **irrecv.decode(\&results):** デコードに成功すると、この関数は“true”を返し、結果を“results”に保持します。IR信号のデコード後、resume()関数を実行して次の信号の受信を続けます。 **7.拡張練習** IRリモコンのキー値をデコードしました。測定した値でLEDを制御してみませんか?実験を設計してみましょう。 LEDをD9に接続し、リモコンのキーを押してLEDの点灯・消灯を行います。 ![image-20250508161123490](media/A13.png) ```c //************************************************************************************* /* keyestudio 4wd BT Car lesson 6.2 IR remote LED http://www.keyestudio.com */ #include int RECV_PIN = 3;//IR受信機のピンをD3に定義 int LED_PIN = 9;//LEDのピンを9に定義 int a=0; IRrecv irrecv(RECV_PIN); decode_results results; void setup() {Serial.begin(9600); irrecv.enableIRIn(); //IR受信機を初期化 pinMode(LED_PIN,OUTPUT);//LEDのピン9を出力に設定 } void loop() { if (irrecv.decode(&results)) { if(results.value==0xFF02FD && (a==0)) //上記のキー値に従い、リモコンの“OK”を押すとLEDを制御 { Serial.println("HIGH"); digitalWrite(LED_PIN,HIGH);//LEDが点灯 a=1; } else if(results.value==0xFF02FD && (a==1)) //再度押すと { Serial.println("LOW"); digitalWrite(LED_PIN,LOW);//LEDが消灯 a=0; } irrecv.resume(); //次の値を受信 } } //************************************************************************************* ``` コードをV4.0ボードに正常にアップロードした後、配線図に従って配線を接続し、USBケーブルでコンピュータに接続してボードに電源を供給します。電源を入れたら、リモコンの「**OK**」キーを押すとLEDの点灯・消灯ができます。